import { ref, computed } from 'vue';
import { ElMessage, ElMessageBox } from 'element-plus';
import demandApi from '../apis/demand';

export default function useDemandEnterpriseSelect() {
  // 响应式数据
  const loading = ref(false);
  const demandList = ref([]);
  const enterpriseDialogVisible = ref(false);
  const selectedDemand = ref(null);
  const potentialEnterprises = ref([]);

  // 过滤出已发布但未接单的需求
  const unacceptedDemands = computed(() => {
    // 状态3表示已发布，状态4表示已接单
    return demandList.value.filter(demand => demand.status === 3);
  });

  // 获取状态文本
  const getStatusText = (status) => {
    const statusMap = {
      0: '待审核',
      1: '审核通过',
      2: '审核拒绝',
      3: '已发布',
      4: '已接单',
      5: '进行中',
      6: '已完成',
      7: '已关闭'
    };
    return statusMap[status] || '未知状态';
  };

  // 获取状态标签类型
  const getStatusType = (status) => {
    const typeMap = {
      0: 'warning',
      1: 'info',
      2: 'danger',
      3: 'primary',
      4: 'success',
      5: 'processing',
      6: 'success',
      7: 'danger'
    };
    return typeMap[status] || 'info';
  };

  // 格式化日期
  const formatDate = (dateString) => {
    if (!dateString) return '';
    const date = new Date(dateString);
    return date.toLocaleString('zh-CN', {
      year: 'numeric',
      month: '2-digit',
      day: '2-digit',
      hour: '2-digit',
      minute: '2-digit'
    });
  };

  // 获取用户需求列表
  const fetchUserDemands = async () => {
    try {
      loading.value = true;
      // 调用实际的API获取用户需求列表
      const response = await demandApi.getDemandList();
      // 确保demandList始终是数组类型
      demandList.value = Array.isArray(response.data) ? response.data : [];
    } catch (error) {
      ElMessage.error('获取需求列表失败：' + (error.message || '未知错误'));
      console.error('获取需求列表失败:', error);
      // 错误时确保demandList是数组
      demandList.value = [];
    } finally {
      loading.value = false;
    }
  };

  // 显示愿意接单的企业列表
  const showEnterpriseList = (demand) => {
    selectedDemand.value = demand;
    // 调用实际的API获取愿意接单的企业列表
    loadPotentialEnterprises(demand.id);
    enterpriseDialogVisible.value = true;
  };

  // 加载愿意接单的企业列表
  const loadPotentialEnterprises = async (demandId) => {
    try {
      loading.value = true;
      // 调用实际的API获取愿意接单的企业列表
      const response = await demandApi.getPotentialEnterprises(demandId);
      // 确保potentialEnterprises始终是数组类型
      potentialEnterprises.value = Array.isArray(response.data) ? response.data : [];
    } catch (error) {
      ElMessage.error('获取企业列表失败：' + (error.message || '未知错误'));
      console.error('获取企业列表失败:', error);
      // 错误时确保potentialEnterprises是数组
      potentialEnterprises.value = [];
    } finally {
      loading.value = false;
    }
  };

  // 选择企业接单
  const selectEnterprise = async (enterprise) => {
    try {
      await ElMessageBox.confirm(
        `确定选择「${enterprise.enterpriseName}」作为接单企业吗？`,
        '确认选择',
        {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          type: 'warning'
        }
      );
      
      // 调用实际的API确认选择企业
      await demandApi.selectEnterprise(selectedDemand.value.id, enterprise.enterpriseId);
      
      // 更新本地状态
      const demandIndex = demandList.value.findIndex(d => d.id === selectedDemand.value.id);
      if (demandIndex !== -1) {
        demandList.value[demandIndex].status = 4; // 更新为已接单状态
      }
      
      ElMessage.success('选择企业成功');
      enterpriseDialogVisible.value = false;
    } catch (error) {
      if (error !== 'cancel') {
        ElMessage.error('选择企业失败：' + (error.message || '未知错误'));
        console.error('选择企业失败:', error);
      }
    }
  };

  return {
    loading,
    demandList,
    enterpriseDialogVisible,
    selectedDemand,
    potentialEnterprises,
    unacceptedDemands,
    getStatusText,
    getStatusType,
    formatDate,
    fetchUserDemands,
    showEnterpriseList,
    loadPotentialEnterprises,
    selectEnterprise
  };
}